package com.hedl.practice.diyJava.network_programming.UDP_programming;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 使用UDP协议通信时，服务器和客户端双方无需建立连接：
 *      服务器端用DatagramSocket(port)监听端口；
 *      客户端使用DatagramSocket.connect()指定远程地址和端口；
 *      双方通过receive()和send()读写数据；
 *      DatagramSocket没有IO流接口，数据被直接写入byte[]缓冲区。
 */
public class Client {
    public static void main(String[] args) throws IOException, InterruptedException {
        DatagramSocket ds = new DatagramSocket();
        ds.setSoTimeout(1000);      //使用指定的超时,以毫秒为单位

        //InetAddress.getByName()根据主机名称确定主机的IP地址。
        ds.connect(InetAddress.getByName("localhost"),6666);        //将套接字连接到此套接字的远程地址,地址和端口号
        DatagramPacket packet = null;
        for (int i = 0;i < 5; i++){
            //发送
            String cmd = new String[]{"date","time","datetime","weather","hello"}[i];
            byte[] data = cmd.getBytes();       //一个数组，的读
            packet = new DatagramPacket(data, data.length);
            ds.send(packet);        //从套字节中发送数据包

            //接受
            byte[] buffer = new byte[1024];
            packet = new DatagramPacket(buffer, buffer.length);
            ds.receive(packet);     //从套字节中接受数据包
            String resp = new String(packet.getData(),packet.getOffset(),packet.getLength());
            System.out.println(cmd+" >>> "+resp);
            Thread.sleep(1500);
        }
        ds.disconnect();        //断开连接
        System.out.println("disconnected.");
    }
}
